package com.neusoft.ch3;
/*
 * 课堂笔记：
 *    顺序、分支、循环
 *    1、循环语句
 *       重复执行、开始条件、结束条件、循环因子
 *       
 *    1.1for循环：
 *       语法：
 *           for(条件初始化语句;循环条件判定语句;改变循环因子语句){
 *              for循环语句体;
 *           }
 *       变种1：
 *           条件初始化语句;
 *           for(;循环条件判定语句;改变循环因子语句){
 *              for循环语句体;
 *           }
 *        变种2：
 *           for(条件初始化语句;循环条件判定语句;){
 *              for循环语句体（包含改变循环因子语句）;              
 *           } 
 *        变种3：
 *           条件初始化语句;
 *           for(;循环条件判定语句;){
 *              for循环语句体（包含改变循环因子语句）;              
 *           }
 *                
 *       执行流程：
 *       (1)执行条件初始化语句；
 *       (2)执行循环条件判定语句，如果判定语句的结果为true，则执行for循环语句体；
 *                          如果判定语句结果为false，则for循环结束。
 * 		 (3)for循环语句体执行完以后，执行改变循环因子语句；然后跳到(2)执行；
 * 		
 *       解析：
 *           1、条件初始化语句执行一次；
 *              也可以将条件初始化语句放在for循环之前,该部分空白即可，但是for中的分号;不能省略；
 *           2、改变循环因子语句也可以放入for循环语句体，则该部分空白即可，分号不能省略；
 *           3、扩展增强型的for循环。
 *           4、不管怎么简化for循环，for中的两个分号不能省略；
 *           5、改变循环因子语句一般多用自增++、自减操作--符。   
 *           6、如果for循环条件判定语句恒为true，则for循环是一个死循环；
 *           
 *    1.2 while循环
 *       语法：
 *           while(循环条件判定表达式){
 *              while循环体;
 *           }
 *       执行流程：
 *          (1)执行循环条件判定表达式，如果判定条件为true，则执行循环体；
 *                               如果为false，则退出while循环；
 *          (2)while循环体执行完成之后，跳到(1)继续执行；
 *          
 *       解析：
 *          1、初始化可以在while语句之前进行；
 *          2、循环因子可以在循环条件判定表达式中修改，或者是在while循环体中修改；
 *          3、如果while循环中的循环条件判定表达式恒为true，则该循环是死循环。（一般要避免产生死循环）                        
 *    1.2 do-while循环
 *       语法：
 *           do{
 *              do-while语句体;
 *           }while(循环条件判定表达式);
 *       执行流程：
 *          (1)执行do语句块中的do-while语句体；
 *          (2)执行循环条件判定表达式，如果判定条件为true，跳到(1)继续执行；
 *                               如果为false，则退出do-while循环；    
 *       解析：
 *          while循环和do-while循环的区别：
 *              while循环是先判定循环条件判定表达式，根据判定结果决定是否执行循环体；
 *              do-while循环是先执行do-while语句体，然后再判定循环条件是否成立，决定是否继续执行；
 *              无论条件是否成立，do-while至少会执行一次循环体；
 *    扩展作业：
 *       for形式的死循环和while形式的死循环那个执行效率高？（当前制作了解）       
 *       
 *    1.3多重嵌套循环
 *       练习题：打印乘法口诀。  
 *             打印*表示的直角三角形。    
 *       
 *    1.4 break和continue语句       
 *           
 *           
 */
public class TestCh3 {

	public static void main(String[] args) {
		testLianxie02();
	}
	
	/**
	 * 课堂练习：打印*表示的直角三角形。
	 * 分析：
	 *     *
	 *     **
	 *     ***
	 *     ****
	 *     *****
	 *     
	 */
	private static void testLianxie03() {
		
	}
	
	/**
	 * 课堂练习：打印9*9乘法口诀。
	 * 分析：
	 *     1*1=1
  	 *	   2*1=2  2*2=4
     *     3*1=3  3*2=6  3*3=9
	 *     ......
	 */
	private static void testLianxie02() {
		// 双重for循环打印乘法口诀
		// 控制打印的行数，i表示需要当前的行数
		for (int i = 1; i <= 9; i++) {
			// 控制打印列数，j表示打印当前的列数
			for (int j = 1; j <= i; j++) {
				// 输出乘法口诀
				System.out.print("  " + i + "*" + j + "=" + (i * j));
			}
			// 打印完一行之后换行
			System.out.println();
		}
	}
	
	/**
	 * 课堂练习：打印输出1-10累加之和。
	 * 分析：
	 *     开始条件：从1开始；
	 *     结束条件：到10结束；
	 *     循环因子：为1；
	 */
	private static void testLianxie01() {
		// 初始变量
		int i = 1;
		// 累加之和
		int sum = 0;
		// 循环求和
		while (i <= 10) {
			// 进行累加操作
			// sum+=i;
			sum = sum + i;
			// 改变循环因子
			i++;
		}
		// 输出结果
		System.out.println("1-10累加之和为：" + sum);
	}
	/**
	 * 课堂练习：打印输出1-10累加之和。
	 * 分析：
	 *     开始条件：从1开始；
	 *     结束条件：到10结束；
	 *     循环因子：为1；
	 */
	private static void testLianxie011() {
		// 初始变量
		int i = 0;
		// 累加之和
		int sum = 0;
		// 循环求和
		while (i++ < 10) {
			// 进行累加操作
			// sum+=i;
			sum = sum + i;
			// 改变循环因子
//			i++;
		}
		// 输出结果
		System.out.println("1-10累加之和为：" + sum);
	}
	/**
	 * do-while示例：打印输出100以内的偶数。
	 * 分析：
	 *     开始条件：从1开始；
	 *     结束条件：到100结束；
	 *     循环因子：为1；
	 */
	private static void testDoWhile01() {
		// 变量初始化
		int i = 0;
		// 统计个数
		int count = 0;
		do {
			if (i % 2 == 0) {
				// 是否换行
				if (count % 10 == 0) {
					System.out.println();
				}
				// 偶数，输出
				System.out.print("  " + i);
				// 统计个数
				count++;
			}
			// 改变循环因子
			//i++;
		} while (i++ < 100);
		
		// 换行
		System.out.println();
		// 输出偶数的个数
		System.out.println("共计偶数个数：" + count);
	}
	/**
	 * while示例：打印输出100以内的偶数。
	 * 分析：
	 *     开始条件：从1开始；
	 *     结束条件：到100结束；
	 *     循环因子：为1；
	 */
	private static void testWhile01() {
		// 变量初始化
		int i = 0;
		// 统计偶数个数
		int count = 0;
		// while语句
		while (i <= 100) {
			// 判定是否为偶数
			if (i % 2 == 0) {
				// 计数+1
				count++; // 偶数的个数+1
				// 输出
				System.out.print("  " + i);
				// 如果是10的倍数，则换行
				if (count % 10 == 0) {
					// 换行
					System.out.println();
				}
			}
			// 更改循环因子
			// i++;
			// i=i+1;
			i += 1;
		}
		// 换行
		System.out.println();
		// 输出偶数的个数
		System.out.println("共计偶数个数：" + count);
	}
	/**
	 * while示例：打印输出100以内的偶数。
	 * 分析：
	 *     开始条件：从1开始；
	 *     结束条件：到100结束；
	 *     循环因子：为1；
	 */
	private static void testWhile011() {
		// 变量初始化
		int i = -1;
		// 统计偶数个数
		int count = 0;
		// while语句
		while (i++ < 100) {
			// 判定是否为偶数
			if (i % 2 == 0) {
				// 计数+1
				count++; // 偶数的个数+1
				// 输出
				System.out.print("  " + i);
				// 如果是10的倍数，则换行
				if (count % 10 == 0) {
					// 换行
					System.out.println();
				}
			}
			// 更改循环因子
			//i++;
		}
		
		// 换行
		System.out.println();
		// 输出偶数的个数
		System.out.println("共计偶数个数：" + count);
	}
	/**
	 * for示例：打印输出100以内的偶数。
	 * 分析：
	 *     开始条件：从1开始；
	 *     结束条件：到100结束；
	 *     循环因子：为1；
	 */
	private static void testFor01() {
		// for循环打印偶数
		System.out.println("1-100之间的偶数为：");
		// 统计输出个数
		int count = 0;
//		for (int i = 0; i <= 100; i++) {
//			// 判定是否为偶数
//			if (i % 2 == 0) {
//				// 计数+1
//				count++; // 偶数的个数+1
//				// 输出
//				System.out.print("  " + i);
//				// 如果是10的倍数，则换行
//				if (count % 10 == 0) {
//					// 换行
//					System.out.println();
//				}
//			}
//		}
		// 变量初始化
//		int i = 0;
//		for (; i <= 100; i++) {
//			// 判定是否为偶数
//			if (i % 2 == 0) {
//				// 计数+1
//				count++; // 偶数的个数+1
//				// 输出
//				System.out.print("  " + i);
//				// 如果是10的倍数，则换行
//				if (count % 10 == 0) {
//					// 换行
//					System.out.println();
//				}
//			}
//		}
//		for (int i = 0; i <= 100; ) {
//		// 判定是否为偶数
//		if (i % 2 == 0) {
//			// 计数+1
//			count++; // 偶数的个数+1
//			// 输出
//			System.out.print("  " + i);
//			// 如果是10的倍数，则换行
//			if (count % 10 == 0) {
//				// 换行
//				System.out.println();
//			}
//		}
//		
//		// 更改循环因子
//		i++;
//	}
		// 变量初始化
		int i = 0;
		for (; i <= 100; ) {
			// 判定是否为偶数
			if (i % 2 == 0) {
				// 计数+1
				count++; // 偶数的个数+1
				// 输出
				System.out.print("  " + i);
				// 如果是10的倍数，则换行
				if (count % 10 == 0) {
					// 换行
					System.out.println();
				}
			}
			
			// 更改循环因子
			i++;
		}
		// 换行
		System.out.println();
		// 输出偶数的个数
		System.out.println("共计偶数个数："+count);
	}

}
